package com.sunrise.generico.servico;

import java.util.Collection;

import javax.annotation.Resource;

import lombok.Getter;

import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import com.sunrise.configuracoes.repositorio.iface.ManterDao;
import com.sunrise.crm.repositorio.iface.UsuarioDao;
import com.sunrise.generico.entidade.Conta;
import com.sunrise.generico.entidade.Usuario;
import com.sunrise.generico.entidade.iface.EntidadeManter;
import com.sunrise.generico.util.MessagesUtil;

@Service
@Transactional(readOnly = true)
public class ManterService<E extends EntidadeManter> {

	@Resource(name = "manterDaoImpl")
	@Getter
	private ManterDao<E> manterDao;
	
	@Resource(name = "usuarioDaoImpl")
	@Getter
	private UsuarioDao usuarioDao;
	
	public Collection<E> buscarPorNomeSomenteAtivo(E e, String nome, Boolean ativo) {
		return manterDao.buscarPorNomeSomenteAtivo(e, nome, ativo);
	}

	public Collection<E> listarOrdenado(E entidade) {
		return manterDao.listarOrdenado(entidade);
	}

	@Transactional(readOnly = false)
	public void alterar(E entidade) {
		manterDao.alterar(entidade);
	}
	
	@Transactional(readOnly = false)
	public void merge(E entidade) {
		manterDao.merge(entidade);
	}

	@Transactional(readOnly = false)
	public String remover(E entidade) {
		manterDao.remover(entidade);
		return MessagesUtil.getMessageKey("removidoSucesso");
	}

	@Transactional(readOnly = false)
	public void inserir(E entidade) {
		manterDao.inserir(entidade);
	}

	public Boolean validarCampoUnico(EntidadeManter entidade) {
		return this.validarCampoUnico(entidade, "nome", entidade.getNome());
	}
	
	public Boolean validarCampoUnico(EntidadeManter entidade, String validarCampo, String valorCampo) {
		return manterDao.validarNomeUnico(entidade, validarCampo, valorCampo);
	}

	public Usuario buscarUsuarioPorUsername(String name) {
		return getUsuarioDao().buscarPorUsername(name);
	}

}
